package com.woniu.zsd.user.config;

import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class RabbitConfig {

    @Bean
    public Queue registerCodeQueue() {
        return new Queue("register-code-queue");
    }

    @Bean
    public Queue expiredQueue() {
        Map<String, Object> params = new HashMap<>();

        // 定义该队列中消息的生存时间，单位毫秒，生存时间最终对应业务的延迟执行时间
        params.put("x-message-ttl", 120 * 1000);

        // x-dead-letter-exchange 属性用于声明死信转发到的交换机
        params.put("x-dead-letter-exchange", "expired-exchange");

        // x-dead-letter-routing-key 声明了这些死信在转发时携带的路由键名称。
        params.put("x-dead-letter-routing-key", "timeout");

        return new Queue("expired-queue",true,false,false,params);
    }

    @Bean
    public Queue orderExpiredQueue() {
        Map<String, Object> params = new HashMap<>();

        // 定义该队列中消息的生存时间，单位毫秒，生存时间最终对应业务的延迟执行时间
        params.put("x-message-ttl", 120 * 1000);

        // x-dead-letter-exchange 属性用于声明死信转发到的交换机
        params.put("x-dead-letter-exchange", "order-expired-exchange");

        // x-dead-letter-routing-key 声明了这些死信在转发时携带的路由键名称。
        params.put("x-dead-letter-routing-key", "order-timeout");

        // 第一个参数是队列名称，
        // 第二个参数表示是否持久化，
        // 第三个参数表示是否独占，
        // 第四个参数表示是否自动删除，
        // 第五个参数表示队列参数
        return new Queue("order-expired-queue",true,false,false,params);
    }
}